package Metronome;

import java.util.Collection;

import Commands.Command;

/**
 * Interface qui s'occupe de faire "marcher" le metronome
 *
 */
public interface MoteurMetronome extends Observable {

	/**
	 * Retourne la valeur de l'etat de marche, true si le metronome fonctionne et false s'il ne l'est pas
	 * @return etatMarche
	 */
	boolean getEtatMarche();

	/**
	 * modifie la valeur de l'etat de marche
	 * @param etatMarche, true si le moteur est en marche, false s'il ne l'est pas
	 */
	void setEtatMarche(boolean bool);

	/**
	 * Retourne la valeur du tempo
	 * @return tempo
	 */
	float getTempo();

	/**
	 * Modifie la valeur du tempo
	 * @param tempo
	 */
	void setTempo(float tempo);

	/**
	 * Retourne le nombre de temps par mesure
	 * @return nbTempsParMesure
	 */
	float getNbTempsParMesure();

	/**
	 * Modifie le nombre de temps par mesure
	 * @param mesure
	 */
	void setNbTempsParMesure(float mesure);

	
	/**
	 * Modifie la commande qui marque le temps
	 * @param cmd
	 */
	void setCmdMarquerTemps(Command cmd);

	
	/**
	 * Modifie la commande qui marque la mesure
	 * @param cmd
	 */
	void setCmdMarquerMesure(Command cmd);

	/**
	 * Retourne la collection des observateurs du moteur
	 * @return  Collection<Observer>
	 */
	public Collection<Observer> getObservers();

	
	/**
	 * Modifie la collection contenant les observers du moteur
	 * @param observers
	 */
	public void setObservers(Collection<Observer> observers);

	/**
	 * Modifie la valeur max du tempo
	 * @param max
	 */
	void setMaxTempo(int max);
	
	/**
	 * Retourne la valeur max du tempo
	 * @return max
	 */
	int getMaxTempo();
	
	/**
	 * Modifie la valeur min du tempo
	 * @param min
	 */
	void setMinTempo(int min);
	
	/**
	 * Retourne la valeur min du tempo
	 * @return min
	 */
	int getMinTempo();
}
